package com.anrongtec.zcpt.callback;

import android.text.TextUtils;

import java.io.IOException;
import java.lang.reflect.Type;

import okhttp3.Response;

/**
 * ================================================ 作 者：廖子尧 版 本：1.0
 * 创建日期：2016/1/14 描 述：默认将返回的数据解析成需要的Bean,可以是 BaseBean，String，List，Map 修订历史：
 * ================================================
 */
public abstract class JsonCallback<T> extends EncryptCallback<T> {

	private Class<T> clazz;
	private Type type;

	public JsonCallback(Class<T> clazz) {
		this.clazz = clazz;
	}

	public JsonCallback(Type type) {
		this.type = type;
	}

	@Override
	public T parseNetworkResponse(Response response) {
		// try {
		String responseData = null;
		try {
			responseData = response.body().string();
		} catch (IOException e1) {
			// TODO Auto-generated catch block
			e1.printStackTrace();
		}
		if (TextUtils.isEmpty(responseData)) {
			return null;
		}
		try {
			responseData = response.body().string();
			T t = null;
			// T t = JSONHelper.parseInfoFromJson(responseData, clazz);
			return t;
		} catch (IOException e) {
			e.printStackTrace();
		}
		return null;

		/**
		 * 一般来说，服务器返回的响应码都包含 code，msg，data 三部分，在此根据自己的业务需要完成相应的逻辑判断
		 * 以下只是一个示例，具体业务具体实现
		 */
		// JSONObject jsonObject = new JSONObject(responseData);
		// String msg = jsonObject.optString("msg", "");
		// int code = jsonObject.optInt("code", 0);
		// String data = jsonObject.optString("data", "");
		// switch (code) {
		// case 0:
		// /**
		// * code = 0 代表成功，默认实现了Gson解析成相应的实体Bean返回，可以自己替换成fastjson等
		// * 对于返回参数，先支持 String，然后优先支持class类型的字节码，最后支持type类型的参数
		// */
		// if (clazz == String.class)
		// return (T) data;
		// // if (clazz != null) return new Gson().fromJson(data, clazz);
		// // if (type != null) return new Gson().fromJson(data, type);
		// break;
		// case 104:
		// // 比如：用户授权信息无效，在此实现相应的逻辑，弹出对话或者跳转到其他页面等
		// break;
		// case 105:
		// // 比如：用户收取信息已过期，在此实现相应的逻辑，弹出对话或者跳转到其他页面等
		// break;
		// case 106:
		// // 比如：用户账户被禁用，在此实现相应的逻辑，弹出对话或者跳转到其他页面等
		// break;
		// case 300:
		// // 比如：其他乱七八糟的等，在此实现相应的逻辑，弹出对话或者跳转到其他页面等
		// break;
		// }
		// Toast.makeText(OkHttpUtils.getContext(),
		// "错误代码：" + code + "，错误信息：" + msg, Toast.LENGTH_SHORT).show();
		// } catch (IOException e) {
		// e.printStackTrace();
		// Toast.makeText(OkHttpUtils.getContext(), "网络IO流读取错误",
		// Toast.LENGTH_SHORT).show();
		// } catch (JSONException e) {
		// e.printStackTrace();
		// Toast.makeText(OkHttpUtils.getContext(), "JSON解析异常",
		// Toast.LENGTH_SHORT).show();
		// }
		// return null;
	}
}
